<?php 
/**
 * 
 * Deze klasse handeld alle handelingen af die te maken hebben met
 * folders. Zoals; het verwijderen en aanmaken van nieuwe folders.
 * code 0 = error
 * code 1 = success
 * 
 * @author Ferry Guikema
 * 
 */
class Dir extends File_abs{
		
	function __construct($webfy){
		parent::__construct($webfy);
	} # ctor
	
	/**
	 * 
	 * Maak een nieuwe folder aan
	 * @param String $name
	 */
	public function create($filename)
	{
		$new_dir = $this->webfy->settings->global['root_path'] .'/'. $filename;
				
		/*** controleer gebruikers rechten ***/
		if ( !$this->webfy->usercontrol->hasRights($this->getDir($filename), 'write') )
		{
			$this->webfy->out = Array('code'	=> '0',
						  'melding'	=> $this->webfy->settings->userrights['write']);
		}
		/*** kijk of folder al bestaat ***/
		else if ( is_dir( $new_dir ) )
		{
			$this->webfy->out = Array('code' 	=> '0', 
									  'melding' => $this->webfy->settings->dir['dir_exist']);
		}	
		/*** Geen geldige naam ***/
		else if ( !parent::checkReservedChars( $filename ) )
		{
			$this->webfy->out = Array('code' 	=> '0',
									  'melding' => $this->webfy->settings->dir['no_valid_name']);
		}
		/*** bestaat folder niet, maak hem dan aan ***/
		else if ( mkdir( $new_dir, 0777 ) )
		{
			chmod($new_dir, 0777);
			$this->webfy->usercontrol->addRights($filename);
			$this->webfy->out = Array('code' 	=> '1',
									  'melding' => $this->webfy->settings->dir['created']);
		}
		/*** onbekende fout ***/
		else {
			$this->webfy->out = Array('code' 	=> '0',
									  'melding' => $this->webfy->settings->dir['not_created']);
		}
	} # func create
	
	/**
	 * 
	 * Verwijder een folder
	 * @param String $name
	 */
	public function remove($file)
	{
		$removed_dir = $this->webfy->settings->global['root_path'] .'/'. $file;
		
		/*** controleer gebruikers rechten ***/
		if ( !$this->webfy->usercontrol->hasRights($this->getDir($file), 'delete') )
		{
			$this->webfy->out = Array('code'	=> '0',
						  'melding'	=> $this->webfy->settings->userrights['delete']);
		}
		/*** verwijder de folder met inhoud ***/
		else if ( $this->rrmdir( $removed_dir ) )
		{
			$this->webfy->out = Array('code' 	=> '1', 
									  'melding' => $this->webfy->settings->dir['removed']);
		}
		/*** onbekende fout ***/
		else 
		{
			$this->webfy->out = Array('code' 	=> '0',
									  'melding' => $this->webfy->settings->dir['not_removed']);
		}
	} # func remove
	
	/**
	*
	* Kopier een bestand / folder
	* @param String $file
	* @param String $new_filename
	*/
	public function copy($file, $newFile)
	{
		/*** controleer gebruikers rechten ***/
		if ( !$this->webfy->usercontrol->hasRights($this->getDir($file), 'write') )
		{
			$this->webfy->out = Array('code'	=> '0',
						  'melding'	=> $this->webfy->settings->userrights['write']);
		}
		/*** controleer gebruikers rechten ***/
		else if ( !$this->webfy->usercontrol->hasRights($this->getDir($newFile), 'write') )
		{
			$this->webfy->out = Array('code'	=> '0',
						  'melding'	=> $this->webfy->settings->userrights['write']);
		}
		/*** kopier een folder met inhoud ***/
		else if ( $this->rcopy( $this->webfy->settings->global['root_path'] .'/'. $file, $this->webfy->settings->global['root_path'] .'/'. $newFile ) )
		{
			$this->webfy->out = Array('code' 	=> '1',
									  'melding' => $this->webfy->settings->dir['copied']);
		}
		/*** onbekende fout ***/
		else
		{
			$this->webfy->out = Array('code' 	=> '0',
								      'melding' => $this->webfy->settings->dir['not_copied']);
		}
	} # func copy
	
	/**
	 * 
	 * Verwijder recursief de inhoud van een folder 
	 * inclusief de folder zelf.
	 * @param String $dir
	 */
	public function rrmdir($dir) {
		if (is_dir($dir)) {
			/*** lijst van folders en bestanden ***/
			$objects = scandir($dir);
			foreach ($objects as $object) {
				if ($object != "." && $object != "..") {
					/*** als object een folder is, roep functie opnieuw aan ***/
					if (filetype($dir."/".$object) == "dir") 
						$this->rrmdir($dir."/".$object); 
					else 
						unlink($dir."/".$object);
				}
			}
			reset($objects);
			rmdir($dir);
			return true;
		}
		return false;
	} # func rrmdir
	
	/**
	 * 
	 * Kopieeerd recursief de inhoud van een folder
	 * inclusief de folder zelf
	 * @param String $src
	 * @param String $dst
	 */
	function rcopy($src, $dst) {
		if (!file_exists($dst))
		{ 
			/*** kopieeer de folder met inhoud ***/
			if (is_dir($src)) 
			{
				/*** maak een folder aan met zelfde naam ***/
				mkdir($dst);
				/*** lijst van sourch folder ***/
				$files = scandir($src);
			
				/*** kopieeer voor elke sub folder alle bestanden en folders ***/
				foreach ($files as $file)
					if ($file != "." && $file != "..")
						$this->rcopy("$src/$file", "$dst/$file");
			}
			/*** kopieeer alle bestanden binnen in de folder ***/
			else if (file_exists($src))
			{ 
				copy($src, $dst);
			}
			return true;
		}
		return false;
	} # func rcopy
		
}

?>

